require('./app');

const book = {
  titlePage: [
    '扉页',
    '图书在版编目（CIP）数据',
    '版权声明',
    '序',
    '前言',
    '致谢',
    '关于本书',
    '关于封面图片'
  ],
  catalogues: [
    {
      name: '第一部分 Node基础',
      chapters: [
        [
          '第1章',
          '1.1 构建于 JavaScript 之上',
          '1.2 异步和事件触发：浏览器',
          '1.3 异步和事件触发：服务器',
          '1.4 DIRT 程序',
          '1.5 默认 DIRT',
          '1.5.1 简单的异步编程',
          '1.5.2 Hello World HTTP 服务器',
          '1.5.3 流数据',
          '1.6 小结'
        ],
        [
          '第2章 构建有多个房间的聊天室程序',
          '2.1 程序概览',
          '2.2 程序需求及初始设置',
          '2.2.1 提供 HTTP 和 WebSocket 服务',
          '2.2.2 创建程序的文件结构',
          '2.2.3 指明依赖项',
          '2.2.4 安装依赖项',
          '2.3 提供 HTML、CSS 和客户端 JavaScript 的服务',
          '2.3.1 创建静态文件服务器',
          '2.3.2 添加 HTML 和 CSS 文件',
          '2.4 用 Socket.IO 处理与聊天相关的消息',
          '2.4.1 设置 Sokcet.IO 服务器',
          '2.4.2 处理程序场景及事件',
          '2.5 在程序的用户界面上使用客户端 JavaScript',
          '2.5.1 将消息和昵称/房间变更请求传给服务器',
          '2.5.2 在用户界面中显示消息及可用房间',
          '2.6 小结'
        ],
        [
          '第3章 Node编程基础',
          '3.1 Node功能的组织及重用',
          '3.1.1 创建模块',
          '3.1.2 用module.exports 微调模块的创建',
          '3.1.3 用 node_modules 重用模块',
          '3.1.4 注意事项',
          '3.2 异步编程技术',
          '3.2.1 用回调处理一次性事件',
          '3.2.2 用事件发射器处理重复性事件',
          '3.2.3 异步开发的难题',
          '3.3 异步逻辑的顺序化',
          '3.3.1 什么时候使用串行流程控制',
          '3.3.2 实现串行化流程控制',
          '3.3.3 实现并行化流程控制',
          '3.3.4 利用社区里的工具',
          '4 小结'
        ]
      ]
    },
    {
      name: '第二部分 用Node开发Web程序',
      chapters: [
        [
          '第4章 构建 Node 开始 Web 程序',
          '4.1 HTTP 服务器的基础知识',
          '4.1.1 Node 如何向开发者呈现 HTTP 请求',
          '4.1.2 一个用 "Hello World" 做响应的 HTTP 服务器',
          '4.1.3 读取请求头及设定响应头',
          '4.1.4 设定 HTTP 响应的状态码',
          '4.2 构建 RESTful Web 服务器',
          '4.2.1 用 POST 请求创建资源',
          '4.2.2 用 GET 请求获取资源',
          '4.2.3 用 DELETE 请求移除资源',
          '4.3 提供静态文件服务',
          '4.3.1 创建一个静态文件服务器',
          '4.3.2 处理服务器错误',
          '4.3.3 用 fs.stat() 实现先发制人',
          '4.4 从表单中接受用户输入',
          '4.4.1 处理提交的表单域',
          '4.4.2 用 formidale 处理上传的文件',
          '4.4.3 计算上传进度',
          '4.5 用 HTTPS 加强程序的安全性',
          '4.6 小结'
        ],
        [
          '第5章 存储 Node 程序中的数据',
          '5.1 无服务器数据存储',
          '5.1.1 内存存储',
          '5.1.2 基于文件的存储',
          '5.2 关系型数据库管理系统',
          '5.2.1 MySQL',
          '5.2.2 PostgreSQL',
          '5.3 NoSQL 数据库',
          '5.3.1 Redis',
          '5.3.2 MongoDB',
          '5.3.3 Mongoose'
        ],
        [
          '第6章 Connect',
          '6.1 搭建一个 Connect 程序',
          '6.2 Connect 的工作机制',
          '6.2.1 做日志的中间件',
          '6.2.2 响应“hello world”的中间件',
          '6.3 为什么中间件的顺序很重要',
          '6.3.1 中间件什么时候不调用 next()',
          '6.3.2 用中间件的顺序执行认证',
          '6.4 挂载中间件和服务器',
          '6.4.1 认证中间件',
          '6.4.2 显示管理面板的中间件',
          '6.5 创建可配置中间件',
          '6.5.1 创建可配置的 logger 中间件组件',
          '6.5.2 构建路由中间件组件',
          '6.6 使用错误处理中间件',
          '6.6.1 Connect 的默认错误处理器',
          '6.6.2 自行处理程序错误',
          '6.6.3 使用多个错误处理中间组件',
          '6.7 小结'
        ],
        [
          '第7章 Connect 自带的中间件',
          '7.1 解析 cookie、请求主体和查询字符串',
          '7.1.1 cookieParser(): 解析 HTTP cookie',
          '7.1.2 bodyParser(): 解析请求主体',
          '7.1.3 limit(): 请求主体的限制',
          '7.1.4 query(): 查询字符串解析',
          '7.2 实现 Web 程序核心功能的中间件',
          '7.2.1 logger(): 记录请求',
          '7.2.2 favicon(): 提供 favicon',
          '7.2.3 methodOverride(): 伪造 HTTP 方法',
          '7.2.4 vhost(): 虚拟主机',
          '7.2.5 session(): 会话管理',
          '7.3 处理 Web 程序安全的中间件',
          '7.3.1 basicAuth(): HTTP 基本认证',
          '7.3.2 csrf(): 跨站请求伪造防护',
          '7.3.3 errorHandler(): 开发错误处理',
          '7.4 提供静态文件服务的中间件',
          '7.4.1 static(): 静态文件服务',
          '7.4.2 compress(): 压缩静态文件',
          '7.4.3 directory(): 目录列表',
          '7.5 小结'
        ],
        [
          '第8章 Express',
          '8.1 生成程序骨架',
          '8.1.1 安装 Express 的可执行程序',
          '8.1.2 生成程序',
          '8.1.3 探索程序',
          '8.2 配置 Express 和你的程序',
          '8.3 渲染视图',
          '8.3.1 视图系统配置',
          '8.3.2 视图查找',
          '8.3.3 把数据输出到视图中',
          '8.4 处理表单和文件上传',
          '8.4.1 实现照片模型',
          '8.4.2 创建照片模型',
          '8.4.3 显示上传照片列表',
          '8.5 创建资源下载',
          '8.5.1 创建照片下载路由',
          '8.5.2 实现照片下载路由',
          '8.6 小结'
        ]
      ]
    },
    { name: '第三部分 用Node中更进一步' }
  ]
};

module.exports = book;
